using PowerManage.API.AuditLog;
using PowerManage.API.Exception;
using PowerManage.API.UOW;

namespace PowerManage.API.Extensions;

/// <summary>
/// MVC相关扩展
/// </summary>
public static class MvcExtension
{
    /// <summary>
    /// 控制器自定义返回格式
    ///
    /// 全局添加行为过滤器，在AddControllers中自定义action行为
    /// 全局注册的优缺点：
    ///优点：
    ///1、开发人员无需关心事务的实现，只需专心业务代码的开发；
    ///2、所有的Action默认添加事务，避免需要事务功能的Action遗漏。
    ///缺点：
    ///1、增加事务开销，很多Action只有查询命令，没必要使用事务；
    ///2、存在大事务的问题，Action里面的查询命令无需事务，但是事务特性是在Action执行前开启的，导致所有Select也会开启事务。
    ///
    /// 全局注册的优缺点：
    ///优点：
    ///1、开发人员无需关心异常的捕捉，只需专心业务代码的开发；
    ///2、所有的Action默认添加事务，避免遗漏异常捕捉。
    ///缺点：
    ///1、全局try，会损耗点性能，但是基本是忽略不计的。
    /// </summary>
    /// <param name="builder"></param>
    public static void AddPowerManageControllers(this WebApplicationBuilder builder)
    {
        //加服务添加到容器中
        builder.Services.AddControllers(configure =>
            {
                configure.Filters.Add<UnitOfWorkFilterAttribute>(); //全局注册事务过滤器
                configure.Filters.Add<PowerManageExceptionFilterAttribute>(); //全局注册异常过滤器
                configure.Filters.Add<AuditLogActionFilterAttribute>(); //全局注册审核日志过滤器
            })
            .AddNewtonsoftJson(options =>
                options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"); //指定日期格式序列化
    }
}